package com.br.negocio.controller;

import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.br.negocio.dao.ServicoDAO;
import com.br.negocio.vo.ServicoVO;

@Service("controllerTipo")
public class ControllerServico {

	@Resource
	private ServicoDAO servicoDAO;
	
	public void atualizarServico(ServicoVO servicoVO) {
		
		if (servicoVO == null) {
			throw new IllegalArgumentException("Um servico valida e obrigatorio.");
		}
		
		if ((servicoVO.getDescricao() == null) ||
			(servicoVO.getDescricao().trim().equals(""))) {
			throw new IllegalArgumentException("Um servico e necesseria para a unidade.");
		}
		
		if(servicoVO.getTipoServico() == 0){
			throw new IllegalArgumentException("Um tipo de servico e necesserio.");
		}
		
		if ((!servicoDAO.validaDuplicado(servicoVO)) &&
			(servicoVO.getCodigo() == 0)) {
			throw new IllegalArgumentException("Este servico ja existe.");
		}

		if (servicoVO.getCodigo() == 0) {
			servicoVO.setDataAlteracao(new Date());
			servicoVO.setDataCriacao(new Date());
			servicoDAO.inserirServico(servicoVO);
		} else {
			servicoVO.setDataAlteracao(new Date());
			servicoDAO.atualizarServico(servicoVO);
		}
	}

	public void removerServico(ServicoVO servicoVO) {
		
		if (servicoVO == null) {
			throw new IllegalArgumentException("Um servico valida e obrigatorio.");
		}
		
		if (servicoVO.getCodigo() == 0) {
			throw new IllegalStateException("O servico tem um codigo invalido: " + servicoVO.getDescricao());
		}
		
		servicoDAO.removerServico(servicoVO);
	}

	public ServicoVO obterServico(ServicoVO servicoVO) {
		
		if (servicoVO == null) {
			throw new IllegalArgumentException("Um servico valida e obrigatorio.");
		}

		return servicoDAO.obterServico(servicoVO);
	}

	public List<ServicoVO> obterListaServico() {
		return servicoDAO.obterListaServico();
	}
}